package pe.edu.upc.dsd.epica.serviceimp;

import javax.jws.WebService;
import javax.xml.soap.SOAPException;

import org.apache.log4j.Logger;

import pe.edu.upc.dsd.epica.dao.UsuarioDao;
import pe.edu.upc.dsd.epica.model.Usuario;
import pe.edu.upc.dsd.epica.service.UsuarioService;

@WebService(endpointInterface = "pe.edu.upc.dsd.epica.service.UsuarioService")
public class UsuarioServiceImpl implements UsuarioService {

	private UsuarioDao usuarioDao;
	private final static Logger logger = Logger
			.getLogger(UsuarioServiceImpl.class);

	public void setUsuarioDao(UsuarioDao usuarioDao) {
		this.usuarioDao = usuarioDao;
	}

	public UsuarioServiceImpl() {
	}

	@Override
	public Usuario find(String codigo) throws SOAPException {
		try {
			Usuario usuarioNew = new Usuario();
			usuarioNew.setCodigo(codigo);
			return usuarioNew;
		} catch (Exception e) {
			logger.error("Titulo:\nBuscar usuario [UsuarioService].\nMensaje:\n"
					+ e.getMessage());
			throw new SOAPException("Error al buscar el usuario.");
		}
		
	}

	// Criterio de aceptacion
	@Override
	public Usuario findByLoginTipo(String login, String tipo)
			throws SOAPException {

		if (login == null || tipo == null)
			throw new IllegalArgumentException(
					"No debe ingresar valores nulos.");

		Usuario usuario = null;

		try {
			usuario = usuarioDao.finByLoginTipo(login, tipo);
		} catch (Exception e) {
			usuario = new Usuario();
			usuario.setCodigo("U"
					+ Integer.toString(usuarioDao.cantidadUsuarios() + 1));
			usuario.setLogin(login);
			usuario.setTipo(tipo);

			try {
				usuarioDao.save(usuario);
			} catch (Exception e2) {
				logger.error("Titulo:\nRegistrar usuario [UsuarioService].\nMensaje:\n"
						+ e.getMessage());
				throw new SOAPException("Error al registrar el usuario.");
			}

		}

		return usuario;
	}

	@Override
	public Usuario findByUsuarioCode(String codigo) throws SOAPException {
		try {
			return usuarioDao.findByUsuarioCode(codigo);
		} catch (Exception e) {
			logger.error("Titulo:\nBuscar usuario [UsuarioService].\nMensaje:\n"
					+ e.getMessage());
			throw new SOAPException("Error al buscar el usuario.");
		}		
	}

	@Override
	public void delete(String codigo) throws SOAPException {
		try {
			usuarioDao.delete(codigo);
		} catch (Exception e) {
			logger.error("Titulo:\nEliminar usuario [UsuarioService].\nMensaje:\n"
					+ e.getMessage());
			throw new SOAPException("Error al eliminar el usuario.");
		}
		
	}

}
